 // 工作流状态枚举
export enum FlowPathStatus {
    DRAFT = 'draft', // 草稿
    PUBLISHED = 'published', // 已发布
    ARCHIVED = 'archived', // 已归档
    DISABLED = 'disabled', // 已禁用
  }
  
  // 工作流节点类型枚举
  export enum FlowPathNodeType {
    START = 'start', // 开始节点
    END = 'end', // 结束节点
    CONDITION = 'condition', // 条件节点
    ACTION = 'action', // 动作节点
    MODEL = 'model', // 模型节点
    FUNCTION = 'function', // 函数节点
    API = 'api', // API节点
    WAIT = 'wait', // 等待节点
    PARALLEL = 'parallel', // 并行节点
    LOOP = 'loop', // 循环节点
  }
  
  // 工作流节点状态枚举
  export enum FlowPathNodeStatus {
    PENDING = 'pending', // 待执行
    RUNNING = 'running', // 执行中
    COMPLETED = 'completed', // 已完成
    FAILED = 'failed', // 已失败
    SKIPPED = 'skipped', // 已跳过
  }
  
  // 工作流节点接口
  export interface FlowPathNode {
    id: string;
    type: FlowPathNodeType;
    name: string;
    description?: string;
    config: Record<string, any>;
    status: FlowPathNodeStatus;
    nextNodes: string[]; // 下一个节点ID列表
    position: {
      x: number;
      y: number;
    };
  }
  
  // 工作流表单值接口
  export interface FlowPathFormValues {
    name: string;
    description?: string;
    version: string;
    status: FlowPathStatus;
    nodes: FlowPathNode[];
    edges: {
      source: string;
      target: string;
      condition?: string; // 条件分支的条件表达式
    }[];
    variables: {
      name: string;
      type: string;
      defaultValue?: any;
      description?: string;
    }[];
    timeout?: number; // 超时时间（毫秒）
    retryTimes?: number; // 重试次数
    retryInterval?: number; // 重试间隔（毫秒）
    tags?: string[]; // 标签
    isPublic?: boolean; // 是否公开
    isEnabled?: boolean; // 是否启用
    modelIds?: string[]; // 可用的模型ID列表
    functionIds?: string[]; // 可用的函数ID列表
    apiIds?: string[]; // 可用的API ID列表
  }
  
  // 工作流接口
  export interface FlowPath extends FlowPathFormValues {
    id: string;
    createdAt: string;
    updatedAt: string;
    createdBy: string;
    updatedBy: string;
    executionCount: number; // 执行次数
    successCount: number; // 成功次数
    failureCount: number; // 失败次数
    averageExecutionTime: number; // 平均执行时间（毫秒）
  }